Patch Lifecycle (Compliance)
Tracks the events emitted by the Approval engine and the events detected by the Patch Status v2 monitor and aligns this to a Patch lifecycle model.
Methodology: Kimball Star Schema.
Fact Type: Accumulating Snapshot
Grain: A Patch Guid on a Device. There is only 1 row per Device/Patch Guid combo
The major phases of the lifecycle as:
- No Approval: A patch has been detected by the Operating System as required and the Patch Server notified. The MSP has yet to take any approval actions.
- Not Required: The MSP has made the positive decision that a patch should be Declined or Not Approved.
- Pending: A patch that has been Approved but has not yet been Installed i.e no installation event has yet been detected.
- Installed: A patch has been installed on a Device. Specifically this means that the first installed detection event has occurred.
- Removed: A patch that was previously installed is no longer on the Device. For Patch Compliance reporting, Removed patches are treated as Not Included and are excluded from compliance score calculations.
Patch Lifecycle (Compliance) schema
Patch Lifecycle (Compliance) table joins
FACT: FACT_PATCH_LIFECYCLE
| Dimension | Dimension key | Fact key | Cardinality |
|---|---|---|---|
|
DIM_TENANT |
TENANT_DK |
TENANT_DK |
1:N |
|
DIM_CUSTOMER_LATEST |
CUSTOMER_DK |
CUSTOMER_DK |
1:N |
|
DIM_SITE_LATEST |
SITE_DK |
SITE_DK |
1:N |
|
DIM_DEVICE_SUMMARY_LATEST |
DEVICE_DK |
DEVICE_DK |
1:N |
|
DIM_DATE_APPROVAL * |
CALENDAR_DATE |
APPROVAL_DATE_EARLIEST |
1:N |
|
DIM_DATE_INSTALLED * |
CALENDAR_DATE |
INSTALLED_EARLIEST |
1:N |
|
DIM_PATCH |
PATCH_DK |
PATCH_DK |
1:N |
* DIM_DATE_APPROVAL and DIM_DATE_INSTALLED are example alias tables of DIM_DATE.
DIM PATCH GLOBAL table join
DIM: DIM_PATCH
| Dimension | Dimension key | Dimension key | Cardinality |
|---|---|---|---|
| DIM_PATCH_GLOBAL | PATCH_GUID | PATCH_GUID | 1:N |
Boilerplate for Patch Lifecycle (Compliance) joins
with DIM_DATE_APPROVAL as (Select * from SHARED_ANALYTICS_DATA.SHARED_DATA.DIM_DATE), DIM_DATE_INSTALLED as (select * from SHARED_ANALYTICS_DATA.SHARED_DATA.DIM_DATE) Select -- enter columns here From SHARED_ANALYTICS_DATA.SHARED_DATA.FACT_PATCH_LIFECYCLE f Join SHARED_ANALYTICS_DATA.SHARED_DATA.DIM_CUSTOMER_LATEST cl on f.Customer_DK = cl.Customer_DK join SHARED_ANALYTICS_DATA.SHARED_DATA.DIM_SITE_LATEST sl on f.Site_DK = sl.Site_DK join SHARED_ANALYTICS_DATA.SHARED_DATA.DIM_DEVICE_SUMMARY_LATEST dl on f.Device_DK = dl.Device_DK join SHARED_ANALYTICS_DATA.SHARED_DATA.DIM_DATE_APPROVAL da on f.Approval_Date_Earliest = da.Calendar_Date join SHARED_ANALYTICS_DATA.SHARED_DATA.DIM_DATE_INSTALLED di on f.Installed_Earliest = di.Calendar_Date join SHARED_ANALYTICS_DATA.SHARED_DATA.DIM_PATCH p on f.Patch_DK = p.Patch_DK join SHARED_ANALYTICS_DATA.SHARED_DATA.DIM_PATCH_GLOBAL pg on p.Patch_GUID = pg.Patch_GUID -- Group By columns here -- Having clauses here -- Order by columns here

.png)